package dao;

import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import modelo.Clientes;
import modelo.Funcionarios;
import util.JPAUtil;

/**
 *
 * @author gilberto.costa 27/03/2012 16:43
 */
public class ClienteDao implements Serializable {

    public static List<Clientes> retornaClientes() {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Clientes order by id_cliente asc");
        List<Clientes> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static Clientes retornaClientesPorId(Long id) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Clientes WHERE id_cliente = ?");
        q.setParameter(1, id);
        Clientes retorno;
        try {
            retorno = (Clientes) q.getSingleResult();
            em.close();
            return retorno;
        } catch (javax.persistence.NoResultException e) {
            em.close();
            return null;
        }
    }

    public static List<Clientes> retornaClientesPorDiaDeVencimento(int parseInt) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Clientes c "
                + "WHERE c.diaVencimento = ?");
        q.setParameter(1, parseInt);
        List<Clientes> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Integer> retornaDiasDeVencimentoReferenteAoFuncionarioDistinct(Long f) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("SELECT DISTINCT c.diaVencimento FROM Clientes c "
                + "WHERE c.id_funcionario.id_func = ? "
                + "order by 1 asc");
        q.setParameter(1, f);
        List<Integer> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Clientes> retornaClientesPorFuncionario(Long f) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Clientes c "
                + "WHERE c.id_funcionario.id_func = ?");
        q.setParameter(1, f);
        List<Clientes> lista = q.getResultList();
        em.close();
        return lista;
    }

    public static List<Clientes> retornaClientesPorFuncionario(Long f, Integer diaVencimento) {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createQuery("FROM Clientes c "
                + "WHERE c.id_funcionario.id_func = ? "
                + "AND c.diaVencimento = ?");
        q.setParameter(1, f);
        q.setParameter(2, diaVencimento);
        List<Clientes> lista = q.getResultList();
        em.close();
        return lista;
    }
}
